package main

import (
	"fmt"
	"io"
	"os"
)

type a struct {
	a, b int
}

func stu() {
	a := &a{1, 2}
	b := a
	b.a = 3
	fmt.Println(a, b)
}

func main() {
	stu()
	// 打开文件
	file, err := os.Open("maze/ceshi.in")
	if err == io.EOF {
		fmt.Println("未读取到数据")
	}
	var a, b, c, d int
	// Fscanf: 扫描从r读取的文本，将连续的空格分隔值存储到由格式确定的连续参数中。
	// 它返回成功解析的项数。输入中的换行符必须与格式中的换行符匹配
	// Scanf 扫描从标准输入读取的文本，将连续的空格分隔值存储到由格式确定的连续参数中。
	// 它返回成功扫描的项目数。如果少于参数数量，err将报告原因。输入中的换行符必须与格式中的换行符匹配。
	// 唯一的例外是：动词%c总是扫描输入中的下一个符文，即使它是空格（或制表符等）或换行符。
	// 参考链接：https://blog.csdn.net/renhaopeng/article/details/85916533
	//要注意一个问题，多行读取时，少不了把其中 \n表示出来，否则， Scanf 和 Fscanf默认都是遇到 \n停止的！

	//fmt.Fscanf(file, "%d", &a)
	//fmt.Fscanf(file, "%d", &b)
	//fmt.Fscanf(file, "%d", &c)
	//fmt.Fscanf(file, "%d", &d)
	fmt.Fscanf(file, "%d %d\n%d\n%d", &a, &b, &c, &d)
	fmt.Println(a, b, c, d)
	// 读取二维数组的 行列
	var row, col int
	fmt.Fscanf(file, "%d %d", &row, &col) // 要加上取地址， 值传递改不了外界的
	fmt.Println(row, col)
	maze := make([][]int, row) // 创建二维数组，实际上是一维数组， 元素又是一维数组
	for i := range maze {
		maze[i] = make([]int, col)
		for j := range maze[i] { // 读取索引
			// 读取数据时， 记得文件的格式，换行是 \r\n 还是 \r  还是 \n。  程序执行要调为 \n 的文件才正确！
			fmt.Fscanf(file, "%d", &maze[i][j])
		}
	}
	fmt.Println(maze)
}
